home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / Asm / AB3DIIsrc / source_4000 / WALLCHUNK.s < prev    next >
Encoding:
Text File  |  1996-06-25  |  5.7 KB  |  364 lines

  1.  
  2.  
  3. RELEASEWALLMEM:
  4.  move.l #walltiles,a0
  5.  move.l #wallchunkdata,a5
  6. relmem:
  7.  move.l 4(a5),d0
  8.  beq.s relall
  9.  
  10.  move.l (a0),d1
  11.  beq.s notthismem
  12.  
  13.  move.l d1,a1
  14.  move.l 4.w,a6
  15.  movem.l a0/a5,-(a7)
  16.  jsr -210(a6)
  17.  movem.l (a7)+,a0/a5
  18.  
  19.  
  20. notthismem:
  21.  addq #8,a5
  22.  addq #4,a0
  23.  bra.s relmem
  24.  
  25. relall:
  26.  rts
  27.  
  28. LOADWALLS:
  29.  
  30. **************************************
  31.  
  32. * New loading system:
  33. * Send each filename to a 'server' along with
  34. * addresses for the return values (pos,len)
  35. * then call FLUSHQUEUE, which actually loads
  36. * the files in...
  37.  
  38.  move.l #walltiles,a0
  39.  moveq #39,d7
  40. emptywalls:
  41.  move.l #0,(a0)+
  42.  dbra d7,emptywalls
  43.  
  44.  move.l #walltiles,a4
  45.  move.l LINKFILE,a3
  46.  add.l #WallGFXNames,a3
  47.  move.l #0,TYPEOFMEM
  48.  
  49. loademin:
  50.  move.l (a3),d0
  51.  beq loadedall
  52.  
  53.  move.l a3,a0
  54.  move.l a4,d0    ; address to put start pos
  55.  move.l #0,d1
  56.  
  57.  jsr QUEUEFILE
  58.  
  59.  addq #4,a4
  60.  
  61.  adda.w #64,a3
  62.  bra loademin
  63.  
  64. loadedall:
  65.  
  66.  rts
  67.  
  68. **************************************
  69.  
  70. ; move.l #walltiles,a0
  71. ; moveq #39,d7
  72. ;emptywalls:
  73. ; move.l #0,(a0)+
  74. ; dbra d7,emptywalls
  75. ;
  76. ; move.l #walltiles,a4
  77. ; move.l LINKFILE,a3
  78. ; add.l #WallGFXNames,a3
  79. ; move.l #0,TYPEOFMEM
  80. ;loademin:
  81. ; move.l (a3),d0
  82. ; beq loadedall
  83.  
  84. ; movem.l a4/a3,-(a7)
  85.  
  86. ; move.l a3,a0
  87. ; jsr LOADAFILE
  88.  
  89. ; movem.l (a7)+,a4/a3
  90.  
  91. ; move.l d0,(a4)+
  92. ; move.l d1,4(a3)
  93.  
  94. ; adda.w #64,a3
  95. ; bra loademin
  96.  
  97. ;loadedall:
  98. ; PRSDN
  99. ; rts
  100.  
  101. handle: dc.l 0
  102.  
  103. UNPACKED: dc.l 0
  104.  
  105. walltiles:
  106.  ds.l 40
  107.  
  108. DEFLOADFILE:
  109. ; Load a file in and unpack it if necessary.
  110. ; Pointer to name in a0
  111. ; Returns address in d0 and length in d1
  112.  
  113.  movem.l d0-d7/a0-a6,-(a7)
  114.  bra.s intoload
  115.  
  116. LOADAFILE:
  117. ; Load a file in and unpack it if necessary.
  118. ; Pointer to name in a0
  119. ; Returns address in d0 and length in d1
  120.  
  121.  movem.l d0-d7/a0-a6,-(a7)
  122.  
  123.  move.l a0,d1
  124.  move.l doslib,a6
  125.  move.l #1005,d2
  126.  jsr -30(a6)
  127.  move.l d0,handle
  128.  
  129. intoload:
  130.  
  131.  lea fib,a5
  132.  move.l handle,d1
  133.  move.l a5,d2
  134.  move.l doslib,a6
  135.  jsr -390(a6)
  136.  move.l $7c(a5),blocklen
  137.  
  138.  move.l TYPEOFMEM,d1
  139.  move.l 4.w,a6
  140.  move.l blocklen,d0
  141.  jsr -198(a6)
  142.  
  143.  move.l d0,blockstart
  144.  
  145.  move.l doslib,a6
  146.  move.l handle,d1
  147.  move.l d0,d2
  148.  move.l blocklen,d3
  149.  jsr -42(a6)
  150.  
  151.  move.l doslib,a6
  152.  move.l handle,d1
  153.  jsr -36(a6)
  154.  
  155.  move.l blockstart,a0
  156.  move.l (a0),d0
  157.  cmp.l #'=SB=',d0
  158.  beq ITSPACKED
  159.  
  160.  move.l blockstart,d0
  161.  move.l blocklen,d1
  162.  move.l d0,a0
  163.  cmp.l #'CSFX',(a0)
  164.  beq ITSASFX
  165.  
  166. ; Not a packed file so just return now.
  167.  movem.l (a7)+,d0-d7/a0-a6
  168.  
  169.  move.l blockstart,d0
  170.  move.l blocklen,d1
  171.  
  172.  rts
  173.  
  174. ITSASFX:
  175.     add.l    #4,d0        ;Skip "CSFX"
  176.     move.l    d1,.CompressedSampleSize
  177.     move.l    d0,a0
  178.     move.l    4.w,a6
  179.     move.l    (a0)+,d0    ;file size
  180.     move.l    d0,.SampleSize
  181.     move.l    a0,.CompressedSamplePosition
  182.     move.l    #MEMF_CHIP,d1
  183.     jsr    _LVOAllocMem(a6)
  184.     move.l    d0,.SamplePosition
  185.     move.l    .CompressedSamplePosition,a0
  186.     move.l    d0,a1
  187.     move.l    .SampleSize,d0
  188.     sub.w    #2,d0
  189.     move.b    (a0)+,d1    ;first byte (actual value)
  190.     move.b    d1,(a1)+
  191.     lea    .FibList(pc),a2
  192. .DecompLoop:
  193.     move.b    (a0)+,d2
  194.     and.w    #$00ff,d2
  195.     move.w    d2,d3
  196.     lsr.w    #4,d2
  197.     and.w    #$000f,d3
  198.     move.b    (a2,d2.w),d4    ;first fib value
  199.     add.b    d4,d1
  200.     move.b    d1,(a1)+    ;store sample value
  201.     dbra    d0,.NotFinishedYet
  202.     bra.s    .SampleFinished
  203. .NotFinishedYet:
  204.     move.b    (a2,d3.w),d4    ;second fib value
  205.     add.b    d4,d1
  206.     move.b    d1,(a1)+    ;store sample value
  207.     dbra    d0,.DecompLoop    
  208. .SampleFinished:
  209.     move.l    .CompressedSamplePosition,a1
  210.     sub.l #8,a1
  211.     move.l    .CompressedSampleSize,d0
  212.     move.l    4.w,a6
  213.     jsr    _LVOFreeMem(a6)
  214.     ;Now check the sample and clip it if it ever gets
  215.     ;too big
  216.     
  217.     move.l    .SamplePosition,a0
  218.     move.l    .SampleSize,d0
  219.     sub.w    #1,d0
  220. .ClipLoop:
  221.     move.b    (a0),d1
  222.     cmp.b    #64,d1
  223.     blt.s    .NotTooBig
  224.     move.b    #63,d1
  225. .NotTooBig:
  226.     cmp.b    #-64,d1
  227.     bge.s    .NotTooSmall
  228.     move.b    #-64,d1
  229. .NotTooSmall:
  230.     move.b    d1,(a0)+
  231.     dbra    d0,.ClipLoop
  232.     
  233.  movem.l (a7)+,d0-d7/a0-a6
  234.  
  235.     move.l    .SamplePosition,d0
  236.     move.l    .SampleSize,d1
  237.     
  238.     rts
  239.     
  240. .CompressedSamplePosition:    dc.l    0
  241. .CompressedSampleSize:        dc.l    0
  242. .SamplePosition:        dc.l    0
  243. .SampleSize:            dc.l    0
  244. .FibList:    dc.b    -34,-21,-13,-8,-5,-3,-2,-1,0,1,2,3,5,8,13,21
  245.  
  246.  
  247.  
  248.  
  249. ITSPACKED:
  250.  
  251.  move.l 4(a0),d0    ; length of unpacked file.
  252.  move.l d0,UNPACKED
  253.  move.l TYPEOFMEM,d1
  254.  move.l 4.w,a6
  255.  jsr -198(a6)
  256.  
  257.  move.l d0,unpackedstart
  258.  
  259.  move.l blockstart,d0
  260.  moveq #0,d1
  261.  move.l unpackedstart,a0
  262.  move.l LEVELDATA,a1
  263.  lea $0,a2
  264.  jsr unLHA
  265.  
  266.  move.l blockstart,d1
  267.  move.l d1,a1
  268.  move.l blocklen,d0
  269.  move.l 4.w,a6
  270.  jsr -210(a6)
  271.  
  272.  move.l unpackedstart,d0
  273.  move.l UNPACKED,d1
  274.  move.l d0,a0
  275.  cmp.l #'CSFX',(a0)
  276.  beq ITSASFX
  277.  
  278.  movem.l (a7)+,d0-d7/a0-a6
  279.  
  280.  move.l unpackedstart,d0
  281.  move.l UNPACKED,d1
  282.  
  283.  rts
  284.  
  285.  
  286. unpackedstart:
  287.  dc.l 0
  288.  
  289. wallchunkdata:
  290.  dc.l GreenMechanicNAME,18560
  291.  dc.l BlueGreyMetalNAME,13056
  292.  dc.l TechnoDetailNAME,13056
  293.  dc.l BlueStoneNAME,10368
  294.  dc.l RedAlertNAME,7552
  295.  dc.l RockNAME,10368
  296.  dc.l scummyNAME,24064
  297.  dc.l stairfrontsNAME,2400
  298.  dc.l bigdoorNAME,13056
  299.  dc.l redrockNAME,13056
  300.  dc.l dirtNAME,24064
  301.  dc.l SwitchesNAME,3456
  302.  dc.l shinyNAME,24064
  303.  dc.l bluemechNAME,15744
  304.  dc.l 0,0
  305.  
  306. GreenMechanicNAME:
  307.  dc.b 'AB3D1:includes/walls/greenmechanic.256wad'
  308.  dc.b 0 
  309.  even
  310. BlueGreyMetalNAME:
  311.  dc.b 'AB3D1:includes/walls/bluegreymetal.256wad'
  312.  dc.b 0
  313.  even
  314. TechnoDetailNAME:
  315.  dc.b 'AB3D1:includes/walls/technodetail.256wad'
  316.  dc.b 0
  317.  even
  318. BlueStoneNAME:
  319.  dc.b 'AB3D1:includes/walls/bluestone.256wad'
  320.  dc.b 0
  321.  even
  322. RedAlertNAME:
  323.  dc.b 'AB3D1:includes/walls/redalert.256wad'
  324.  dc.b 0
  325.  even
  326. RockNAME:
  327.  dc.b 'AB3D1:includes/walls/rock.256wad'
  328.  dc.b 0
  329.  even
  330. scummyNAME:
  331.  dc.b 'AB3D1:includes/walls/scummy.256wad'
  332.  dc.b 0
  333.  even
  334. stairfrontsNAME:
  335.  dc.b 'AB3D1:includes/walls/stairfronts.256wad'
  336.  dc.b 0
  337.  even
  338. bigdoorNAME:
  339.  dc.b 'AB3D1:includes/walls/bigdoor.256wad'
  340.  dc.b 0
  341.  even
  342. redrockNAME:
  343.  dc.b 'AB3D1:includes/walls/redrock.256wad'
  344.  dc.b 0
  345.  even
  346. dirtNAME:
  347.  dc.b 'AB3D1:includes/walls/dirt.256wad'
  348.  dc.b 0
  349.  even
  350. SwitchesNAME:
  351.  dc.b 'AB3D1:includes/walls/switches.256wad'
  352.  dc.b 0
  353.  even 
  354. shinyNAME:
  355.  dc.b 'AB3D1:includes/walls/shinymetal.256wad'
  356.  dc.b 0
  357.  even
  358. bluemechNAME:
  359.  dc.b 'AB3D1:includes/walls/bluemechanic.256wad'
  360.  dc.b 0
  361.  even
  362.  
  363.